package com.example.redisstudy;

import java.util.regex.Pattern;

public class PermanentResidencePermitValidator {

    // 18位数字正则表达式

    /**
     * 验证中国外国人永久居留证件号是否合法
     * @param idNumber 待验证的证件号
     * @param gender 性别（奇数代表男性，偶数代表女性）
     * @param birthDate 出生日期（格式：yyyyMMdd）
     * @return 校验结果，true 表示合法，false 表示不合法
     */
    public static String isValid(String idNumber, int gender, String birthDate) {

        // 长度必须为18位
        if (idNumber == null || idNumber.length() != 18) {
            return "长度必须为18位";
        }

        // 格式必须为18位数字
        String regex = "^9\\d{17}$";
        System.out.println(Pattern.matches("^9\\d{17}$", idNumber));
        if (!Pattern.matches(regex, idNumber)) {
            return "格式必须为18位数字";
        }



        // 首位必须为9
        if (idNumber.charAt(0) != '9') {
            return "首位必须为9";
        }

        // 7-14位必须与出生日期一致
        String idBirthDate = idNumber.substring(6, 14);
        System.out.println(idBirthDate);
        if (!idBirthDate.equals(birthDate)) {
            return "7-14位"+idBirthDate+"必须与出生日期一致";
        }

        // 15-17位判断性别
        int idGender = Integer.parseInt(idNumber.substring(14, 17));
        if (Integer.parseInt(idNumber.substring(14, 17)) % 2 != gender % 2) {
            return "15-17位"+idGender+"位判断性别";
        }

        // 如果通过了以上校验规则，说明证件号合法
        return "true";
    }

    public static void main(String[] args) {
        // 测试
        String idNumber1 = "912345199001014557";
        String idNumber2 = "112345199001014557";
        int gender1 = 1; // 男性
        int gender2 = 2; // 女性
        String birthDate = "19900101"; // 1990年1月1日

        System.out.println("证件号1合法性检验结果：" + isValid(idNumber1, gender1, birthDate));
        System.out.println("证件号2合法性检验结果：" + isValid(idNumber2, gender2, birthDate));
    }
}
